#ifndef CALCULATE_H
#define CALCULATE_H
#include <QString>

/*********************************************************************
 * 功  能:	计算电场中的X坐标
 * 参  数:	dt      时间
 *          V       初速度大小
 *          angle   初速度方向
 * 返回值:	返回电场中dt时间的X坐标
 ********************************************************************/
double inEleCalX(double dt, double V, double angle);

/*********************************************************************
 * 功  能:	计算电场中的Y坐标
 * 参  数:	dt      时间
 *          V       初速度大小
 *          angle   初速度方向
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 * 返回值:	返回电场中dt时间的Y坐标
 ********************************************************************/
double inEleCalY(double dt, double V, double angle, double CMR,
                 bool isPos, double E, bool isUp);

/*********************************************************************
 * 功  能:	计算电场中的和速度大小
 * 参  数:	dt      时间
 *          V       初速度大小
 *          angle   初速度方向
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 * 返回值:	返回电场中dt时间的和速度大小
 ********************************************************************/
double inEleCalV(double dt, double V, double angle, double CMR,
                 bool isPos, double E, bool isUp);

/*********************************************************************
 * 功  能:	计算电场中速度偏向角的正切值
 * 参  数:	dt      时间
 *          V       初速度大小
 *          angle   初速度方向
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 * 返回值:	返回电场中dt时间的速度偏向角的正切值
 ********************************************************************/
double inEleCalTan(double dt, double V, double angle, double CMR,
                   bool isPos, double E, bool isUp);

/*********************************************************************
 * 功  能:	计算电场中速度偏向角
 * 参  数:	dt      时间
 *          V       初速度大小
 *          angle   初速度方向
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 * 返回值:	返回电场中dt时间的速度偏向角
 ********************************************************************/
double inEleCalA(double dt, double V, double angle, double CMR,
                   bool isPos, double E, bool isUp);

/*********************************************************************
 * 功  能:	计算磁场中X坐标
 * 参  数:	dt      时间
 *          V       初速度大小
 *          angle   初速度方向
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          B       磁场强度
 *          isOut   磁场方向，传入true表示磁场垂直纸面向外，传入false则反之
 * 返回值:	返回磁场中dt时间的X坐标
 ********************************************************************/
double inMagCalX(double dt, double V, double angle, double CMR,
                 bool isPos, double B, bool isOut);

/*********************************************************************
 * 功  能:	计算磁场中Y坐标
 * 参  数:	dt      时间
 *          V       初速度大小
 *          angle   初速度方向
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          B       磁场强度
 *          isOut   磁场方向，传入true表示磁场垂直纸面向外，传入false则反之
 * 返回值:	返回磁场中dt时间的Y坐标
 ********************************************************************/
double inMagCalY(double dt, double V, double angle, double CMR,
                 bool isPos, double B, bool isOut);

/*********************************************************************
 * 功  能:	计算磁场中的速度偏向角
 * 参  数:	dt      时间
 *          V       初速度大小
 *          angle   初速度方向
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          B       磁场强度
 *          isOut   磁场方向，传入true表示磁场垂直纸面向外，传入false则反之
 * 返回值:	返回磁场中dt时间的速度偏向角
 ********************************************************************/
double inMagCalA(double dt, double V, double angle, double CMR,
                 bool isPos, double B, bool isOut);

/*********************************************************************
 * 功  能:	计算磁场中做圆周运动的半径
 * 参  数:	V       初速度大小
 *          CMR     荷质比
 *          B       磁场强度
 * 返回值:	返回磁场中磁场中做圆周运动的半径
 ********************************************************************/
double inMagCalR(double V, double CMR, double B);

/*********************************************************************
 * 功  能:	计算磁场中做圆周运动的周期
 * 参  数:	CMR     荷质比
 *          B       磁场强度
 * 返回值:	返回磁场中做圆周运动的周期
 ********************************************************************/
double inMagCalT(double CMR, double B);

/*********************************************************************
 * 功  能:	计算电磁场中的X坐标
 * 参  数:	dt      时间
 *          V       初速度大小
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 *          B       磁感应强度
 *          isOut   磁感应强度的方向，传入true表示垂直纸面向外，传入false则反之
 * 返回值:	返回电磁场中dt时间的X坐标
 ********************************************************************/
double inEleAndMagCalX(double dt, double V, double CMR, bool isPos,
                       double E, bool isUp, double B, bool isOut);

/*********************************************************************
 * 功  能:	计算电磁场中的水平分速度大小
 * 参  数:	dt      时间
 *          V       初速度大小
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 *          B       磁感应强度
 *          isOut   磁感应强度的方向，传入true表示垂直纸面向外，传入false则反之
 * 返回值:	返回电磁场中dt时间的水平分速度大小
 ********************************************************************/
double inEleAndMagCalVx(double dt, double V, double CMR, bool isPos,
                       double E, bool isUp, double B, bool isOut);

/*********************************************************************
 * 功  能:	计算电磁场中的Y坐标
 * 参  数:	dt      时间
 *          V       初速度大小
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 *          B       磁感应强度
 *          isOut   磁感应强度的方向，传入true表示垂直纸面向外，传入false则反之
 * 返回值:	返回电磁场中dt时间的Y坐标
 ********************************************************************/
double inEleAndMagCalY(double dt, double V, double CMR, bool isPos,
                       double E, bool isUp, double B, bool isOut);

/*********************************************************************
 * 功  能:	计算电磁场中的竖直分速度大小
 * 参  数:	dt      时间
 *          V       初速度大小
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 *          B       磁感应强度
 *          isOut   磁感应强度的方向，传入true表示垂直纸面向外，传入false则反之
 * 返回值:	返回电磁场中dt时间的竖直分速度大小
 ********************************************************************/
double inEleAndMagCalVy(double dt, double V, double CMR, bool isPos,
                       double E, bool isUp, double B, bool isOut);

/*********************************************************************
 * 功  能:	计算电磁场中的合速度大小
 * 参  数:	dt      时间
 *          V       初速度大小
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 *          B       磁感应强度
 *          isOut   磁感应强度的方向，传入true表示垂直纸面向外，传入false则反之
 * 返回值:	返回电磁场中dt时间的合速度大小
 ********************************************************************/
double inEleAndMagCalV(double dt, double V, double CMR, bool isPos,
                       double E, bool isUp, double B, bool isOut);

/*********************************************************************
 * 功  能:	计算电磁场中的速度偏向角
 * 参  数:	dt      时间
 *          V       初速度大小
 *          CMR     荷质比
 *          isPos   粒子电性，传入true表示粒子带正电荷，传入false粒子则带负电荷
 *          E       电场强度
 *          isUp    电场方向，传入true表示电场竖直向上，传入false电场则竖直向下
 *          B       磁感应强度
 *          isOut   磁感应强度的方向，传入true表示垂直纸面向外，传入false则反之
 * 返回值:	返回电磁场中dt时间的速度偏向角
 ********************************************************************/
double inEleAndMagCalA(double dt, double V, double CMR, bool isPos,
                       double E, bool isUp, double B, bool isOut);

/*********************************************************************
 * 功  能：    实现科学计数法QString->double
 * 参  数：    str  科学计数法表示的数字
 *
 * 返回值：    科学计数法double类型
 ********************************************************************/
double sciNotation(QString str);

/********************************************************************
 * 功  能：     将符合条件的计算结果用科学计数法表示
 * 参  数：     res   计算出的结果
 *
 * 返回值：     QString类型
 *             科学计数法表示
 *******************************************************************/
QString sciResult(double res);

/********************************************************************
 * 功  能：     得到科学计数法表示的数量级
 * 参  数：     str   传入一个字符串的数字
 *
 * 返回值：     返回该科学计数法表示的级数
 *******************************************************************/
double getNumLayer(QString str);

#endif // CALCULATE_H
